// src/utils/request.js
import { message } from '@/utils/antd-imports';
import axios from 'axios';


// 配置 baseURL 和 timeout
const service = axios.create({
  baseURL: import.meta.env.VITE_API_BASE_URL || 'http://106.52.158.123:8087',
  timeout: 15000, // 请求超时时间（毫秒）
  headers: {
    'Content-Type': 'application/json',
  }
});

// 请求拦截器
service.interceptors.request.use(
  (config) => {
    // 添加认证 token（如果有）
    const token = localStorage.getItem('token');
    if (token) {
      config.headers['Authorization'] = `Bearer ${token}`;
    }
    return config;
  },
  (error) => {
    return Promise.reject(error);
  }
);

// 响应拦截器
service.interceptors.response.use(
  (response) => {
    const res = response.data;
    // 业务成功判断（根据后端接口规范调整）
    if (res.code !== 200) {
      const errorMessage = res.message || '请求失败';
      message.error(errorMessage);
      const error = new Error(errorMessage);
      error.code = res.code;
      error.data = res.data;
      error.response = response;
      return Promise.reject(error);
    }
    return res; // 返回完整的响应对象，包含 code, message, data
  },
  (error) => {
    // HTTP 状态码处理
    if (error.response) {
      switch (error.response.status) {
        case 401:
          // Token过期或无效，清除本地存储并跳转到登录页
          localStorage.removeItem('token');
          localStorage.removeItem('username');
          localStorage.removeItem('userType');
          localStorage.removeItem('rememberMe');
          
          // 如果不在登录页，则跳转到登录页
          if (window.location.pathname !== '/login') {
            message.error('登录已过期，请重新登录');
            window.location.href = '/login';
          } else {
            message.error('用户名或密码错误');
          }
          break;
        case 403:
          message.error('权限不足，拒绝访问');
          break;
        case 404:
          message.error('资源不存在');
          break;
        case 500:
          message.error('服务器内部错误');
          break;
        default:
          message.error(error.response.data?.message || error.message || '请求失败');
      }
    } else {
      // 网络错误或其他错误
      message.error('网络连接失败，请检查网络设置');
    }
    return Promise.reject(error);
  }
);

export default service;